"""
Operadores
"""

# Operadores aritméticos
print(f"Suma: 10 + 3 = {10 + 3}")
print(f"Resta: 10 - 3 = {10 - 3}")
print(f"División: 10  3 = {10 / 3}")
print(f"Multiplicación: 10 * 3 = {10 + 3}")
print(f"Módulo: 10 % 3 = {10 % 3}")
print(f"Exponente: 10 ** 3 = {10 ** 3}")
print(f"División entera: 10 // 3 = {10 // 3}")

# Operadores de comparación
print(f"Igualdad: 10 == 3 es {10 == 3}")
print(f"Desigualdad: 10 != 3 es {10 != 3}")
print(f"Mayor que: 10 > 3 es {10 > 3}")
print(f"Menor que: 10 < 3 es {10 < 3}")
print(f"Mayor o igual que: 10 >= 3 es {10 >= 3}")
print(f"Menor o igual que: 10 <= 3 es {10 <= 3}")

# Operadores lógicos
print(f"AND &&: 10 + 3 == 13 and 5-1 == 4 es {10 + 3 == 13 and 5-1 == 4}")
print(f"OR ||: 10 + 3 == 13 or 5-1 == 4 es {10 + 3 == 14 or 5-1 == 4}")
print(f"NOT !: not 10 + 3 ==14 es {not 10 + 3 == 14}")

# Operadores de asginación
my_number = 11      
print(my_number)
my_number += 1      # suma y asignación
print(my_number)
my_number -= 1      # resta y asignación
print(my_number)
my_number *= 1      # multiplicación y asignación
print(my_number)
my_number /= 2      # división y asignación
print(my_number)
my_number %= 1      # módulo y asignación
print(my_number)
my_number **= 1     # exponente y asignación
print(my_number)
my_number //= 1     # división entera y asignación
print(my_number)

# Operadores de identidad 
my_new_umber = my_number
print(f"my_number is my_new_umber es {my_number is my_new_umber}")
print(f"my_number is not my_new_umber es {my_number is not my_new_umber}")

# Operadores de pertenencia
print(f"'u' in 'Mario' = {'u' in 'Mario'}")
print(f"'u' not in 'Mario' = {'u' not in 'Mario'}")

# Operadores de bit
a = 10  # 1010
b = 3   # 0011

print(f"AND: 10 & 3 = {10 & 3}")    # 0010 = 2
print(f"OR: 10 | 3 = {10 | 3}")     # 1011 = 11
print(f"XOR: 10 ^ 3 = {10 ^ 3}")    # 1001 = 9
print(f"NOT: ~10 = {~10}")
print(f"Desplazamiento a la derecha: 10 >> 2 = { 10 >> 2}")  #0010
print(f"Desplazamiento a la izquierda: 10 << 2 = { 10 << 2}")  #10100


"""
Estructuras de control
"""

# Condicionales
my_string = "Mario"
if my_string == "Mario":
    print("my_string es 'Mario'")
elif my_string == "Pedro":
    print("my_string es 'Pedro'")
else:
    print("my_string no es 'Mario ni 'Pedro'")

# Iterativas
for i in range(0,11):
    print(i)

i=0
while i <= 10:
    print(i)
    i += 1

# Manejo de excepciones
try:
    10/0
except:
    print("Error!")
finally:
    print("Esto se ejecuta siempre, haya un error o no!")


'''
Ejercicio extra
'''

def ejerc_extra():
    for i in range(10,56):
        if i % 2 == 0 and i != 16 and i % 3 != 0:
            print(i)

ejerc_extra()

